iT邦幫忙

2024 iThome 鐵人賽

DAY 24
0
Software Development

Spring boot 從零到寫出ChatGPT系列 第 24

Spring boot 從零開始 (24) - Spring security 身分驗證Model建立

  • 分享至 

  • xImage
  •  

接續昨天的分享,今天我們來繼續跟大家分享Spring security這個強大的模組吧!

其實我們昨天在安裝完套件後,我們輸入 「http://localhost:8080/login」,我們會看到預設的身分登入畫面👇
https://ithelp.ithome.com.tw/upload/images/20241008/20112118k7P1ZKgwDZ.png

所以接著下來,我們就順勢來實現身分驗證的機制吧!

(一) 建立身分驗證

  1. 我們利用Spring security提供的物件UserDetails來存放請求的使用資訊
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "_user")
public class UserInfo implements UserDetails {
    @Id
    @GeneratedValue
    private Long id;
    @Column(unique = true)
    private String email;
    private String password;
    private String userName;
    @Enumerated(EnumType.STRING)
    private UserRole userRole;

    public UserInfo(String userName, String email, String password) {
        this.userName = userName;
        this.email = email;
        this.password = password;
    }


    @Override
    public List<SimpleGrantedAuthority> getAuthorities() {
        List<SimpleGrantedAuthority> authorities =
                Arrays.stream(userRole.name().split(",")).map(
                        SimpleGrantedAuthority::new).collect(Collectors.toList());
        return authorities;
    }

    @Override
    public String getUsername() {
        return email;
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }
    
    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }


    @Override
    public boolean isEnabled() {
        return true;
    }
}

這邊我們可以把UserRole設定為以下三種權限

public enum UserRole {
    ADMIN, USER, GUEST;
}

(二) API設計邏輯

  1. 一個取得user資訊的API
  2. 一個註冊user的API
  3. 一個登入的API

我們明天接著繼續來實現身分驗證吧 !!!!

參考來源

官網


上一篇
Spring boot 從零開始 (23) - Spring security 介紹 & 基本配置
下一篇
Spring boot 從零開始 (25) - Spring security 5.7 升級到6.x之間的改動
系列文
Spring boot 從零到寫出ChatGPT30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言